package br.affCorp.view.impl;

import java.util.ArrayList;
import java.util.Collection;

import javax.faces.event.ActionEvent;

import org.ajax4jsf.model.KeepAlive;

import br.affCorp.controller.facade.impl.UsuarioFacade;
import br.affCorp.model.ObjetoDeAprendizagemDTO;
import br.affCorp.model.UsuarioDTO;
import br.affCorp.view.FacesAb;
import br.util.AFFCorpWebUtil;
import br.util.WebContentUtil;
import br.util.WebMessage;

@KeepAlive(ajaxOnly = true)
public class UsuarioPerfilFaces extends FacesAb {

	private static final long serialVersionUID = 1L;

	private UsuarioDTO perfilDTO;
	private UsuarioFacade usuarioFacade;

	private Collection<UsuarioDTO> usuarioList;
	private Collection<ObjetoDeAprendizagemDTO> objetoDeAprendizagemList;

	public UsuarioPerfilFaces() {
		this.inicializarFaces();
	}

	protected void inicializarFaces() {
		this.inicializarDTO();
		this.inicializarFacade();
	}

	protected void inicializarDTO() {
		perfilDTO = new UsuarioDTO();
	}

	protected void inicializarFacade() {
		usuarioFacade = new UsuarioFacade();
	}

	protected void inicializarLista() {
		usuarioList = new ArrayList<UsuarioDTO>();
		objetoDeAprendizagemList = new ArrayList<ObjetoDeAprendizagemDTO>();
	}

	public String abrirPerfil() {

		try {
			if (usuarioFacade.isAssociado(perfilDTO)) {

				usuarioFacade.obterPorUID(perfilDTO);

				usuarioList = perfilDTO.getAmigos();
				objetoDeAprendizagemList = perfilDTO.getObjetosDeAprendizagem();
			} else {
				this.inicializarLista();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (!AFFCorpWebUtil.isNullOrEmpty(perfilDTO)) {
			return WebContentUtil.USUARIO_PERFIL;
		}

		return WebContentUtil.PESQUISA;
	}

	public void pesquisar(ActionEvent event) {
		try {
			usuarioList = new ArrayList<UsuarioDTO>();
			String nickName = AFFCorpWebUtil.getRequestParameter("amigosInput");
			usuarioList = usuarioFacade.obterContatosDoOrkutPorFiltro(
					perfilDTO, nickName);
		} catch (Exception e) {
			WebMessage.addError(e);
		}
	}

	public Collection<UsuarioDTO> autocomplete(Object suggest) {
		String pref = (String) suggest;
		Collection<UsuarioDTO> result = usuarioFacade
				.obterContatosDoOrkutPorFiltro(perfilDTO, pref);
		return result;
	}

	public UsuarioDTO getPerfilDTO() {
		return perfilDTO;
	}

	public void setPerfilDTO(UsuarioDTO perfilDTO) {
		this.perfilDTO = perfilDTO;
	}

	public Collection<UsuarioDTO> getUsuarioList() {
		return usuarioList;
	}

	public void setUsuarioList(Collection<UsuarioDTO> usuarioList) {
		this.usuarioList = usuarioList;
	}

	public Collection<ObjetoDeAprendizagemDTO> getObjetoDeAprendizagemList() {
		return objetoDeAprendizagemList;
	}

	public void setObjetoDeAprendizagemList(
			Collection<ObjetoDeAprendizagemDTO> objetoDeAprendizagemList) {
		this.objetoDeAprendizagemList = objetoDeAprendizagemList;
	}

}
